#include "formdecmasters.h"
#include "ui_formdecmasters.h"
#include "dlgstringedit.h"

FormDecMasters::FormDecMasters(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FormDecMasters)
{
    ui->setupUi(this);
    connect(ui->btn_add, SIGNAL(clicked()), this, SLOT(add_master()));
    connect(ui->btn_del, SIGNAL(clicked()), this, SLOT(del_master()));
    connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(update_master(QModelIndex)));
    connect(ui->btn_select, SIGNAL(clicked()), this, SLOT(select_record()));
   // ui->btn_select->hide();
}

FormDecMasters::~FormDecMasters()
{
    delete ui;
}


void FormDecMasters::update_models()
{
    qDebug()<<"Form Decision masters loading models";
    QStringList qstrl_masters;
    SLEE_HDB_REC_LST qhl_data;
    mqvl_indexes.clear();
    ui->listWidget->clear();

    mqvl_indexes = mp_dbms->get_db(LAKDB_DECMASTERS)->findDataRange(-1,NULL,true, NULL, false, &qhl_data);
    mqvl_indexes.removeFirst();
    qhl_data.removeFirst();

    for(int i = 0; i < mqvl_indexes.size(); i++)
    {
        qstrl_masters.append(qhl_data.at(i).value(FLD_DECDB_NAME).toString());
    }

    ui->listWidget->addItems(qstrl_masters);

}


void FormDecMasters::add_master()
{
        QString qstr_new = RUSTR("Для внесения в базу, введите название органа здесь.");
        DlgStringEdit *p_se = new DlgStringEdit();
        p_se->set_data(qstr_new, RUSTR("Наименование органа, ответственного за выдачу решений"));
        if(p_se->exec())
        {
            if(p_se->is_changed())
            {
                SLEE_HDB_REC qh_data;
                qh_data[FLD_DECDB_NAME] = p_se->get_data();
                mp_dbms->db_put(LAKDB_DECMASTERS, qh_data);
                update_models();
            }
        }

        delete p_se;
}

void FormDecMasters::del_master()
{
    int index = ui->listWidget->currentIndex().row();
    if(index < 0)
    {
        lakhMsgE()<<RUSTR("Ошибка. Не выбраны данные для удаления.");
        return;
    }
    if(!mp_dbms->can_remove(LAKDB_DECMASTERS, mqvl_indexes.at(index))) return;
    SLEE_HDB_REC qh_data = mp_dbms->get_data(LAKDB_DECMASTERS, mqvl_indexes.at(index));
    mp_dbms->get_db(LAKDB_DECMASTERS)->removeData(qh_data, mqvl_indexes.at(index));
    update_models();
}

void FormDecMasters::update_master(const QModelIndex index)
{
      SLEE_HDB_REC qh_data = mp_dbms->get_data(LAKDB_DECMASTERS, mqvl_indexes.at(index.row()));
      DlgStringEdit *p_se = new DlgStringEdit();
      p_se->set_data(qh_data.value(FLD_DECDB_NAME).toString(),
                     RUSTR("Наименование органа, ответственного за выдачу решений"));
      if(p_se->exec())
      {
          if(p_se->is_changed())
          {
              qh_data[FLD_DECDB_NAME] = p_se->get_data();
              mp_dbms->db_put(LAKDB_DECMASTERS, qh_data, mqvl_indexes.at(index.row()));
              update_models();
          }
      }

      delete p_se;
}


void FormDecMasters::select_record()
{
    if(ui->listWidget->currentRow() < 0  ) emit record_selected(QVariant());
    emit record_selected(mqvl_indexes.at(ui->listWidget->currentRow()));
    hide();
}

void FormDecMasters::enable_selection()
{
    ui->btn_select->show();
}

void FormDecMasters::hide_sel_btn()
{
    ui->btn_select->hide();
}
